Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

400
Visualizações
¿Cuándo usar corchetes [] en las directivas @Inputs y cuándo no?

Estoy un poco confundido.

Vea esta directiva simple:

 @Directive({ selector: '[myDirective]' }) export class MyDirective { private text: string; private enabled: boolean; @Input() myDirective:string; @Input('myText') set myText(val: string) { this.text = val; } @Input('myEnabled') set myEnabled(val: boolean) { this.enabled = val; } ngOnInit() { console.log("myDirective string: " + this.myDirective); console.log("myText string: " + this.text); console.log("myEnabled boolean: " + this.enabled); } }

si mi html se verá así:

 <div [myDirective]="myDefaultText" [myEnabled]="true" [myText]="abc"></div>

La salida será:

 myDirective string: myDefaultText real value // good myEnabled boolean: true // good myText string: undefined // Why?

Si QUITO el [] de myText :

 <div [myDirective]="myDefaultText" [myEnabled]="true" myText="abc"></div>

La salida será:

 myDirective string: myDefaultText real value // good myEnabled boolean: true // good myText string: abc // GOOD

También puedo eliminar el [] de myEnabled y también funcionará. Así que aquí está mi confusión: cuando necesito usar corchetes [] y cuando no, aunque quiero que el usuario que va a usar myDirective nunca tenga que preguntarse si o no, creo que los corchetes [] siempre deben ser allá. ¿no es así?

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Cuando usa [] para enlazar a un @Input() , es básicamente una expresión de plantilla.

De la misma manera, mostrar {{abc}} no mostraría nada (a menos que realmente tuviera una variable llamada abc ).

Si tiene una cadena @Input() y desea vincularla a una cadena constante, puede vincularla así: [myText]=" 'some text' " , o en resumen, como un atributo HTML normal: myText="some text" .

La razón por la que [myEnabled]="true" funcionó es porque true es una expresión de plantilla válida que, por supuesto, se evalúa como booleana true .

over 4 years ago · Santiago Trujillo Relatório

0

Si escribe <img [src]="heroImageUrl"> significa que el lado derecho heroImageUrl es una expresión de plantilla.

La diferencia simple entre [myText]="abc" y myText="abc" es que en el primero le está pidiendo a angular que establezca la PROPIEDAD de destino myText usando la expresión de plantilla abc , mientras que en el último establece la propiedad de destino llamada myText usando el cadena 'abc'.

Entendamos un poco más sobre HTML.

En HTML puedes definir un elemento como este.

 <input type="text" value="Bob">

input es un elemento cuyos attributes son tipo y valor. Cuando su navegador analice esto, creará una entrada DOM (un objeto) para este elemento. La entrada DOM tendrá algunas properties como align, baseURI, childNodes, children, etc. Entonces, esa es la diferencia entre los atributos HTML y las propiedades DOM Ver referencia . A veces, el atributo y la propiedad tienen los mismos nombres, lo que genera confusión. Para la etiqueta de entrada anterior, tiene el value de atributo = Bob y también tiene un value de propiedad que tendrá el valor de lo que escriba en el cuadro de texto. En resumen, el atributo es lo que define sobre la etiqueta y la propiedad es lo que se genera en el árbol DOM.

En el mundo de Angular, la única función de los atributos es inicializar el elemento y posiblemente el estado de la directiva. Cuando escribe un enlace de datos, está tratando exclusivamente con propiedades y eventos del objeto de destino. Los atributos HTML desaparecen efectivamente.

Entonces, para resumir, en <div [myDirective]="myDefaultText" [myEnabled]="true" [myText]="abc"></div> esencialmente estás diciendo que:

  1. aplicar la directiva myDirective a mi elemento div.
  2. vincule la variable myEnabled a la expresión de la derecha. La expresión dice true , por lo que el valor de myEnabled es true.
  3. vincule la variable myText a la expresión de la derecha. La expresión dice abc . ¿Hay algún abc definido? No, entonces la expresión se evaluó como indefinida.
over 4 years ago · Santiago Trujillo Relatório

0

Los corchetes le dicen a Angular que evalúe la expresión de la plantilla. Si omite los corchetes, Angular trata la cadena como una constante e inicializa la propiedad de destino con esa cadena. ¡No evalúa la cadena!

No cometas el siguiente error:

 <!-- ERROR: HeroDetailComponent.hero expects a Hero object, not the string "currentHero" --> <hero-detail hero="currentHero"></hero-detail>

comprobar: https://angular.io/docs/ts/latest/guide/template-syntax.html#!#property-binding

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda